home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / mac / LOGIC Apple II 5.25" Library - ProDOS / PRO001.dsk / FIN / SECURITY.ANAL.bas < prev    next >
BASIC Source File  |  2012-02-16  |  5KB  |  166 lines

  1. 1  REM  WRITTEN BY ERIC ROSENFELD
  2. 2  REM    70 LANCASTER RD.
  3. 3  REM    ARLINGTON,MA  02174
  4. 90  REM  IF YOU DO NOT HAVE ENOUGH MEMORY TO RUN THIS PROGRAM CHANGE THE DIM STATEMENT IN 102 (CHANGE FROM 250 TO 100)
  5. 100  DIM SEC$(2),PD$(4)
  6. 101  DIM A(2),B(2),ALPHA(2,2),BETA(2,2)
  7. 102  DIM S(2,250),R(2,250),X(250),Y(250)
  8. 103  DIM D(3),STK(2,10)
  9. 150 PD$(1) = "DAILY"
  10. 151 PD$(2) = "WEEKLY"
  11. 152 PD$(3) = "MONTHLY"
  12. 153 PD$(4) = "YEARLY"
  13. 154 NUM = 2
  14. 200  CALL  -936
  15. 210  VTAB 10: HTAB 10: PRINT "SECURITY ANALYSIS"
  16. 215  VTAB 12: PRINT " USING THE CAPITAL ASSET PRICING MODEL"
  17. 220  FOR I = 1 TO 3000: NEXT I
  18. 300  CALL  -936
  19. 310  VTAB 12: PRINT "ARE YOU ENTERING DATA FROM"
  20. 320  PRINT "   1.  KEYBOARD"
  21. 330  PRINT "   2.  TAPE"
  22. 340  INPUT "ENTER APPROPRIATE NUMBER: ";TAPE
  23. 350  IF TAPE = 2 GOTO 1000
  24. 500  CALL  -936
  25. 501  PRINT "ENTER THE NAME OF THE MARKET INDEX (UP  TO 10 LETTERS):": INPUT SEC$(1)
  26. 510  PRINT "ENTER THE NAME OF THE SECURITY (UP TO 10LETTERS):": INPUT SEC$(2)
  27. 520  PRINT : PRINT "ENTER THE APPROPRIATE NUMBER:"
  28. 530  PRINT "THE DATA IS:"
  29. 540  PRINT "    1.  DAILY"
  30. 550  PRINT "    2.  WEEKLY"
  31. 560  PRINT "    3.  MONTHLY"
  32. 570  PRINT "    4.  YEARLY"
  33. 580  INPUT PERIOD
  34. 590  IF PERIOD = 1  THEN T = 1/360
  35. 600  IF PERIOD = 2  THEN T = 1/52
  36. 610  IF PERIOD = 3  THEN T = 1/12
  37. 620  IF PERIOD = 4  THEN T = 1
  38. 630  IF PERID <1  OR PERIOD >4  THEN  GOTO 520
  39. 640  PRINT "ENTER THE NUMBER OF OBSERVATIONS:": INPUT N
  40. 650  PRINT : PRINT "ENTER THE CURRENT YIELD ON 1 YEAR TBILLS(IN PERCENT I.E. .09 FOR 9 PERCENT):"
  41. 651  INPUT R
  42. 654 INIT = 1
  43. 655  FOR J = 1 TO 2
  44. 660  CALL  -936: PRINT "ENTER DATA FOR  ";SEC$(J): PRINT 
  45. 670  FOR I = INIT TO N
  46. 680  PRINT "OBSERVATION  ";I: INPUT S(J,I)
  47. 690  NEXT I: NEXT J
  48. 700  CALL  -936
  49. 710  VTAB 12: INPUT "DO YOU WISH TO SAVE DATA ON TAPE (ENTER Y OR N): ";ANS$
  50. 720  IF ANS$ = "N" GOTO 2000
  51. 722  FOR J = 1 TO 2
  52. 723 STK(J,0) =  LEN(SEC$(J))
  53. 724  FOR I = 1 TO STK(J,0)
  54. 725 STK(J,I) =  ASC( MID$ (SEC$(J),I,1))
  55. 726  NEXT I: NEXT J
  56. 739  CALL  -936
  57. 740  VTAB 12: PRINT "TURN TAPE ON (RECORD)"
  58. 750  PRINT "AND PRESS ANY KEY"
  59. 755 D(1) = N:D(2) = PERIOD:D(3) = T
  60. 760  GET ANS$
  61. 800  STORE STK
  62. 820  STORE D
  63. 830  STORE S
  64. 840  CALL  -936
  65. 850  VTAB 12: PRINT "TURN TAPE OFF"
  66. 870  GOTO 2000
  67. 1000  CALL  -936
  68. 1010  VTAB 12: PRINT "TURN TAPE ON (PLAY)"
  69. 1020  PRINT "AND PRESS ANY KEY"
  70. 1030  GET ANS$
  71. 1040  RECALL STK
  72. 1050  RECALL D
  73. 1060  RECALL S
  74. 1070 N = D(1):PERIOD = D(2):T = D(3)
  75. 1080  CALL  -936
  76. 1090  VTAB 12: PRINT "TURN TAPE OFF"
  77. 1100  FOR J = 1 TO 2
  78. 1105  FOR I = 1 TO STK(J,0)
  79. 1110 SEC$(J) = SEC$(J) + CHR$(STK(J,I))
  80. 1120  NEXT I: NEXT J
  81. 1200  FOR I = 1 TO 1000: NEXT I
  82. 1500  CALL  -936
  83. 1510  VTAB 12: PRINT : PRINT "ENTER THE CURRENT YIELD ON 1 YEAR TBILLS(IN PERCENT I.E. .09 FOR 9 PERCENT):"
  84. 1520  INPUT R
  85. 1600  CALL  -936
  86. 1610  VTAB 12: PRINT "DO YOU WISH TO UPDATE THE DATA (ENTER   Y OR N):": GET ANS$
  87. 1620  IF ANS$ = "N" GOTO 2000
  88. 1630  PRINT : PRINT : PRINT "HOW MANY ADDITIONAL DATA POINTS? "
  89. 1640  INPUT ADD
  90. 1650 INIT = N +1
  91. 1660 N = N +ADD
  92. 1700  GOTO 655
  93. 2000  FOR J = 1 TO NUM
  94. 2010  GOSUB 5000
  95. 2020  GOSUB 7000
  96. 2030  FOR JJ = 1 TO 3000: NEXT JJ
  97. 2040  NEXT J
  98. 3000  END 
  99. 5000  REM  CALCULATION ROUTINE
  100. 5010 PLOW = S(J,1):PHIGH = S(J,1)
  101. 5011 PMEAN = 0:PVAR = 0
  102. 5020  FOR I = 1 TO N
  103. 5030  IF S(J,I) <PLOW  THEN PLOW = S(J,I)
  104. 5040  IF S(J,I) >PHIGH  THEN PHIGH = S(J,I)
  105. 5050 PMEAN = PMEAN +S(J,I)/N
  106. 5060 PVAR = PVAR +(S(J,I) ^2)/N
  107. 5070  NEXT I
  108. 5080 PVAR = PVAR -PMEAN ^2
  109. 5200 R(J,2) = (S(J,2)/S(J,1)) -1
  110. 5210 RLOW = R(J,2):RHIGH = R(J,2)
  111. 5220 RMEAN = 0:RVAR = 0
  112. 5222  FOR I = 2 TO N
  113. 5225 R(J,I) = (S(J,I)/S(J,I -1)) -1
  114. 5230  IF R(J,I) <RLOW  THEN RLOW = R(J,I)
  115. 5240  IF R(J,I) >RHIGH  THEN RHIGH = R(J,I)
  116. 5250 RMEAN = RMEAN +R(J,I)/(N -1)
  117. 5260 RVAR = RVAR +(R(J,I) ^2)/(N -1)
  118. 5270  NEXT I
  119. 5280 RVAR = RVAR -RMEAN ^2
  120. 5300 RF = ((1 +R) ^T) -1
  121. 5400 OBS = N -1
  122. 5410  FOR I = 1 TO OBS
  123. 5420 X(I) = R(1,I +1) -RF
  124. 5430 Y(I) = R(J,I +1) -RF
  125. 5440  NEXT I
  126. 5500  GOSUB 6000
  127. 5510 BETA(1,J) = B(1)
  128. 5520 BETA(2,J) = B(2)
  129. 5530 ALPHA(1,J) = A(1)
  130. 5540 ALPHA(2,J) = A(2)
  131. 5999  RETURN 
  132. 6000  REM  LINEAR REGRESSION      ROUTINE
  133. 6010 XYP = 0:X2P = 0:SST = 0:XMEAN = 0:YMEAN = 0
  134. 6020  FOR I = 1 TO OBS
  135. 6030 XMEAN = XMEAN +X(I)/OBS:YMEAN = YMEAN +Y(I)/OBS
  136. 6040  NEXT I
  137. 6050  FOR I = 1 TO OBS
  138. 6060 XP = X(I) -XMEAN
  139. 6070 YP = Y(I) -YMEAN
  140. 6080 XYP = XYP +XP *YP
  141. 6090 X2P = X2P +XP ^2
  142. 6100 SST = SST +YP ^2
  143. 6110  NEXT I
  144. 6120 B(1) = XYP/X2P
  145. 6130 A(1) = YMEAN -B(1) *XMEAN
  146. 6170 S2 = (1/(OBS -2)) *(SST -B(1) *XYP)
  147. 6175  IF S2 <0  THEN S2 = 0
  148. 6180 B(2) =  SQR(S2/X2P)
  149. 6190 A(2) =  SQR(S2 *((1/OBS) +XMEAN ^2/X2P))
  150. 6200 R2 = B(1) ^2 *X2P/SST
  151. 6250  RETURN 
  152. 7000  REM  OUTPUT ROUTINE
  153. 7001  CALL  -936
  154. 7002  PRINT "SECURITY               ";SEC$(J)
  155. 7010  PRINT : PRINT "NUMBER OF OBSERVATIONS ";N
  156. 7020  PRINT "PERIODICITY OF DATA    ";PD$(PERIOD)
  157. 7030  PRINT : PRINT "PRICE DATA          RETURN DATA"
  158. 7040  PRINT : PRINT "HIGH    ";PHIGH;"     ";RHIGH
  159. 7050  PRINT : PRINT "LOW     ";PLOW;"     ";RLOW
  160. 7060  PRINT : PRINT "MEAN    ";PMEAN;"     ";RMEAN
  161. 7070  PRINT : PRINT "VAR     ";PVAR;"     ";RVAR
  162. 7080  PRINT : PRINT "STD DEV "; SQR(PVAR);"     "; SQR(RVAR)"
  163. 7090  PRINT : PRINT : PRINT "BETA     ";BETA(1,J);"    SE  ";BETA(2,J)
  164. 7100  PRINT "ALPHA    ";ALPHA(1,J);"    SE  ";ALPHA(2,J)
  165. 7110  PRINT "R SQUARED  ";R2
  166. 7200  RETURN